草庐IT

NumPy 位运算

全部标签

c++ - 如何避免转换运算符调用复制构造函数?

作为优化/清理过程的一部分,我试图了解如何减少临时拷贝。在执行此操作时,我注意到转换运算符调用了我的类的复制构造函数,否则可以避免这种情况。structCSetViewer{ints;CSetViewer(intsize):s(size){}CSetViewer(constCSetViewer&)=delete;CSetViewer&operator=(constCSetViewer&)=delete;CSetViewer(CSetViewer&&)=delete;CSetViewer&operator=(CSetViewer&&)=delete;};structCSet{operat

c++ - 任何运算符、函数调用和构造函数的通用持续时间计

我使用模板化的meter函数(见下文)来测量函数的运行时间。然后我也想将它用于构造函数。据我所知,没有办法直接将类型作为函数参数传递。所以我想出了这个解决方法,将它仅作为模板参数传递(最小示例):templateautometer(Tt,P...p){autot1=high_resolution_clock::now();t(p...);autot2=high_resolution_clock::now();autodif=t2-t1;returnduration_cast(dif);}templateautometer(P...p){autot1=high_resolution_cl

c++ - 带有转换运算符的类上的 static_cast

我刚刚遇到这种行为,我很难理解为什么这不起作用。enumclassTestEnum{Foo,Bar};classMyClass{public:operatorTestEnum(){returnm_enum;}TestEnumm_enum=TestEnum::Foo;}MyClasstheClass;intenumValue=static_cast(theClass);//doesnotwork,conversionoperatornotcalledintenumValue=static_cast(static_cast(theClass))//worksasexpected我知道编译器

大量使用运算符重载的 C++ XML 库

前段时间我看到一个用于C++的XML库,它大量使用运算符重载,允许可爱类似于以下的语法:#include#includeusingnamespacesome_xml_library;intmain(){elem_tdiv;doc_td=_"hello"_;std::cout输出:helloIIRC库还完全支持属性和嵌套元素。我梦到过这个吗,或者有人知道这个图书馆叫什么吗? 最佳答案 也许this? 关于大量使用运算符重载的C++XML库,我们在StackOverflow上找到一个类似的问

c++ - 摆脱重载的提取运算符? (C++)

我正在尝试使用重载的“>>”来扫描文件中的输入。问题是,我不知道如何处理文件结尾。在这种情况下,我的文件由一个数字组成,后跟几个字符例如:9rl8天6ffistream&operator>>(istream&is,Move&move){charc;inti=0;c=is.get();if(!isalnum(c))return;move.setNum(c);//Iconvertthechartoanint,butI'ledititoutwhile((c=is.get())!='\n'){move.setDirection(i,c);//setscharactercintoinarraya

c++ - 消除运算符重载中的临时变量

注意:正如sellibitze所指出的,我不是最新的右值引用,因此我提出的方法包含错误,请阅读他的回答以了解错误。我正在阅读Linus'rant中的一篇昨天有(某处)反对运算符重载的咆哮。提示似乎是,如果你有一个S类型的对象,那么:Sa=b+c+d+e;可能涉及很多临时对象。在C++03中,我们有复制省略来防止这种情况:Sa=((b+c)+d)+e;我希望最后的...+e得到优化,但我想知道有多少临时文件是用用户定义的operator+创建的。线程中有人建议使用表达式模板来处理这个问题。现在,这个线程可以追溯到2007年,但现在当我们想到消除临时变量时,我们会想到Move。所以我在考虑

c++ - 关于 C++ 中 sizeof 运算符的强大功能

我正在阅读现代C++设计。下面的描述中提到了sizeofoperator。以下段落从泛型编程的角度进行解释。Thereisasurprisingamountofpowerinsizeof:Youcanapplysizeoftoanyexpression,nomatterhowcomplex,andsizeofreturnsitssizewithoutactuallyevaluatingthatexpressionatruntime.Thismeansthatsizeofisawareofoverloading,templateinstantiation,conversionrules—

c++ - 可变参数扩展可以用作逗号运算符调用链吗?

我正在查看“Howtoproperlyusereferenceswithvariadictemplates”,想知道逗号扩展能走多远。这是答案的一个变体:inlinevoidinc(){}templateinlinevoidinc(T&t,Args&...args){++t;inc(args...);}由于可变参数被扩展为以逗号分隔的元素列表,这些逗号在语义上是否等同于模板/函数参数分隔符,或者它们是否被插入词法,使它们适合任何(后处理器)使用,包括逗号运算符?这适用于我的GCC-4.6://Usethesamezero-argument"inc"templateinlinevoidi

c++ - "null logger"- 是否会使用 ostream 运算符的空类从优化代码中编译出什么都不做?

如果我有一个在Release模式下为空的日志记录类,并且有一个什么都不做的ostream运算符。它或多或少看起来像这样:structnull_logger{templateinlinenull_logger&operator我创建了一个简单的测试并将生成的程序集粘贴到下面:constchar*foo(){return"hello";}intmain(){inti=0;null_logger()老实说,我并不完全理解汇编。根据@Als的建议,我寻找了call语句,但没有找到。因此可以安全地假设,在Release模式下,将编译出对该ostream运算符的任何调用吗?这是生成的程序集,使用g

c++ - 在模板类中重载下标运算符

我正在尝试实现一个通用(模板)双向链表,类似于C#.NET实现。我想构建一个“捷径”方法来获取具有特定索引的元素,并决定使用下标运算符。我按照说明做了,想出了这样的东西。templateclassList{public:T&operator[](intindex){returniterator->GetCurrentValue();//iteratorisoftypeIteratorandreturnsT&}};但是当我开始在我的代码中使用它时:List*myList=newList();...intvalue=myList[i];//iisint我收到一个编译器错误:main.cpp